﻿/*! @file
********************************************************************************
<PRE>
文 件 名    : TransformUtil.cs
说    明    : 辅助工具类
作    者    : 汪泽然
--------------------------------------------------------------------------------
备    注    : 
--------------------------------------------------------------------------------
修改记录: 
 * 日    期    版  本    修改人    修改内容 
 * 2009-7-9    0.5.0     汪泽然    
</PRE>
********************************************************************************
* 版权所有(c) 2008 ~ 2009, 汪泽然, 保留所有权利
*******************************************************************************/
using System;
using System.IO;
using System.Text;

namespace Wangzeran.Transform.Core.Util
{
    /// <summary>
    /// 辅助工具类
    /// </summary>
    public class TransformUtil
    {
        /// <summary>
        /// 获取文件的文本内容字符串
        /// </summary>
        /// <param name="filePath">文件路径</param>
        /// <param name="encoding">文本编码</param>
        /// <returns></returns>
        public static string GetFileContent(string filePath)
        {
            try
            {
                Encoding encoding = GetType(filePath);

                string content = String.Empty;
                using (StreamReader sr = new StreamReader(filePath, encoding))
                {
                    content = sr.ReadToEnd();
                }
                return content;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 获取文件的文本内容字符串
        /// </summary>
        /// <param name="filePath">文件路径</param>
        /// <param name="content">写入文本内容</param>
        /// <param name="encoding">文本编码</param>
        /// <returns></returns>
        public static string WriteFileContent(string filePath, string content)
        {
            try
            {
                Encoding encoding = GetType(filePath);

                using (StreamWriter sw = new StreamWriter(filePath, false, encoding))
                {
                    sw.Write(content);
                }
                return content;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 获取文件扩展名
        /// </summary>
        /// <param name="filePath">文件完整路径</param>
        /// <returns></returns>
        public static string GetFileExt(string filePath)
        {
            try
            {
                return filePath.Substring(filePath.LastIndexOf(@".") + 1);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 获取文件文本的编码方式
        /// </summary>
        /// <param name="fileName">文件路径</param>
        /// <returns></returns>
        public static Encoding GetType(string fileName)
        {
            FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            System.Text.Encoding r = GetType(fs);
            fs.Close();
            return r;
        }   

        /// <summary>
        /// 获取文本的编码方式
        /// </summary>
        /// <param name="fs">文本流</param>
        /// <returns></returns>
        public static Encoding GetType(FileStream fs)
        {
            /*byte[] Unicode=new byte[]{0xFF,0xFE};  
            byte[] UnicodeBIG=new byte[]{0xFE,0xFF};  
            byte[] UTF8=new byte[]{0xEF,0xBB,0xBF};*/

            BinaryReader r = new BinaryReader(fs, System.Text.Encoding.Default);
            byte[] ss = r.ReadBytes(3);
            r.Close();
            //编码类型 Coding=编码类型.ASCII;   
            if (ss[0] >= 0xEF)
            {
                if (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF)
                {
                    return System.Text.Encoding.UTF8;
                }
                else if (ss[0] == 0xFE && ss[1] == 0xFF)
                {
                    return System.Text.Encoding.BigEndianUnicode;
                }
                else if (ss[0] == 0xFF && ss[1] == 0xFE)
                {
                    return System.Text.Encoding.Unicode;
                }
                else
                {
                    return System.Text.Encoding.Default;
                }
            }
            else
            {
                return System.Text.Encoding.Default;
            }
        } 

    }
}
